import pandas as pd
import talib as ta
#参考 https://q.vnpy.cn/thread-12-1-1.html

#存储指标参数
NOTPAR  = -1
DAYU    =  1
XIAOYU  = -1
dict_talibparameter={
        #Momentum Indicators (动量指标)
        'ADX': [[4,'平均趋向指数'],['high', 'low', 'close', 'timeperiod'],[NOTPAR,NOTPAR,NOTPAR,14],[['ADX',25]]],
        'ADXR': [[4,'平均趋向指数的趋向指数'],[ 'high', 'low', 'close', 'timeperiod'],[NOTPAR,NOTPAR,NOTPAR,14],[['ADXR',25]]],
        'APO': [[4 ,'绝对价格振荡器'],['close', 'fastperiod', 'slowperiod', 'matype'],[NOTPAR,12,26,0],[['APO',25]]],
        'AROON': [[3,'阿隆指标'],['high', 'low', 'timeperiod'],[NOTPAR,NOTPAR,14],[['AroonUp',50],['AroonDown',50],['AroonUp','AroonDown']]],
        'AROONOSC': [[3,'阿隆振荡'],[ 'high', 'low', 'timeperiod'],[NOTPAR,NOTPAR,14],[['AROONOSC',25]]],
        'BOP': [[4,'均势指标'],['open', 'high', 'low', 'close'],[NOTPAR,NOTPAR,NOTPAR,NOTPAR],[['bop',50]]],
        'CCI': [[4,'顺势指标'],[ 'high', 'low', 'close', 'timeperiod'],[NOTPAR,NOTPAR,NOTPAR,14],[['cci',50]]],        # 【顺势指标】 测量股价是否已超出常态分布范围
        'CMO': [[2,'钱德动量摆动指标'],['real', 'timeperiod'],[NOTPAR,14],[['cmo',50]]],
        'DX': [[4,'DX动向指标或趋向指标'],['high', 'low', 'close', 'timeperiod'],[NOTPAR,NOTPAR,NOTPAR,1],[['dx',50]]],
        'MACD': [[4,'平滑异同移动平均线'],['real', 'fastperiod', 'slowperiod', 'signalperiod'],[NOTPAR,14,26,14],[['macd',50]]],
        'MACDEXT': [[7,'具有可控MA类型的MACD'],['real', 'fastperiod', 'fastmatype', 'slowperiod', 'slowmatype', 'signalperiod', 'signalmatype'],[0,0,0,0,0,0,1]],
        'MACDFIX': [[2,'移动平均收敛/发散修正'],['real', 'signalperiod'],[NOTPAR,14],[['cci',50]]],
        'MFI':     [[5,'资金流量指标'],['high','low', 'close', 'volume', 'timeperiod'],[0,0,0,1]],
        'MINUS_DI': [[4,'下升动向值(与DX相似)'],['high', 'low', 'close', 'timeperiod'],[0,0,0,1]],
        'MINUS_DM': [[3,'上升动向值（与DX相似）'],['high', 'low', 'timeperiod'],[0,0,1]],
        'MOM': [[2,'上升动向值'],['real', 'timeperiod'],[0,1]],
        'PLUS_DI': [[4,'Plus方向指示器'],['high', 'low', 'close', 'timeperiod'],[0,0,0,1]],
        'PLUS_DM': [[3,'Plus定向运动'],['high', 'low', 'timeperiod'],[0,0,1]],
        'PPO': [[4,'价格震荡百分比指数（与MACD相似）'],[ 'real', 'fastperiod', 'slowperiod', 'matype'],[0,0,0,1]],
        'ROC': [[2,'变动率指标'],[ 'real', 'timeperiod'],[0,1]],
        'ROCP': [[2,'变化率百分比'],[ 'real', 'timeperiod'],[0,1]],
        'ROCR': [[2,'变化率比率'],[ 'real', 'timeperiod'],[0,1]],
        'ROCR100': [[2,'变化率100比例'],[ 'real', 'timeperiod'],[0,1]],
        'RSI': [[2,'相对强弱指数'],[ 'real', 'timeperiod'],[0,1]],
        'STOCH': [[8,'KDJ指标中的KD指标'],[ 'high', 'low', 'close', 'fastk_period', 'slowk_period', 'slowk_matype', 'slowd_period', 'slowd_matype'],[0,0,0,0,0,0,0,1]],
        'STOCHF': [[6,'随机快速'],[ 'high', 'low', 'close', 'fastk_period', 'fastd_period', 'fastd_matype'],[0,0,0,1,1,1]],
        'STOCHRSI': [[5,'随机相对强弱指数'],[ 'real', 'timeperiod', 'fastk_period', 'fastd_period', 'fastd_matype'],[0,0,0,0,1]],
        'TRIX': [[2,'三次平滑EMA的1天变化率（与ROC相似）'],[ 'real', 'timeperiod'],[0,1]],
        'ULTOSC': [[6,'终极波动指标'],[ 'high', 'low', 'close', 'timeperiod1', 'timeperiod2', 'timeperiod3'],[0,0,0,1,1,1]],
        'WILLR': [[4,'威廉指标'],[ 'high', 'low', 'close', 'timeperiod'],[0,0,0,1]],

        #Overlap Studies  okpip install C:\Users\wdg\anaconda3\Scripts\TA_Lib-0.4.21-cp38-cp38-win_amd64.whl
        'BBANDS': [],
        'DEMA': [],
        'EMA': [],
        'HT_TRENDLINE': [],
        'KAMA': [],
        'MA': [],
        'MAMA': [],
        'MAVP': [],
        'MIDPOINT': [],
        'MIDPRICE': [],
        'SAR': [],
        'SAREXT': [],
        'SMA': [],
        'T3': [],
        'TEMA': [],
        'TRIMA': [],
        'WMA': [],

        #Pattern Recognition (模式识别)
        'CDL2CROWS': [],          # 【两只乌鸦】 三日K线模式，第一天长阳，第二天高开收阴，第三天再次高开继续收阴，收盘比前一日收盘价低，预示股价下
        'CDL3BLACKCROWS': [],     # 【三只乌鸦】 三日K线模式，连续三根阴线，每日收盘价都下跌且接近最低价，每日开盘价都在上根K线实体内，预示股价下跌。
        'CDL3INSIDE': [],         # 【三内部上涨和下跌】 三日K线模式，母子信号+长K线，以三内部上涨为例，K线为阴阳阳，第三天收盘价高于第一天开盘价，第二天K线在第一天K线内部，预示着股价上涨。
        'CDL3LINESTRIKE': [],     # 【三线打击】  四日K线模式，前三根阳线，每日收盘价都比前一日高，开盘价在前一日实体内，第四日市场高开，收盘价低于第一日开盘价，预示股价下跌。
        'CDL3OUTSIDE': [],        # 【三外部上涨和下跌】  三日K线模式，与三内部上涨和下跌类似，K线为阴阳阳，但第一日与第二日的K线形态相反，以三外部上涨为例，第一日K线在第二日K线内部，预示着股价上涨。
        'CDL3STARSINSOUTH': [],   # 【南方三星】 三日K线模式，与大敌当前相反，三日K线皆阴，第一日有长下影线，第二日与第一日类似，K线整体小于第一日，第三日无下影线实体信号，成交价格都在第一日振幅之内，预示下跌趋势反转，股价上升
        'CDL3WHITESOLDIERS': [],  # 【三个白兵】 日K线模式，三日K线皆阳，每日收盘价变高且接近最高价，开盘价在前一日实体上半部，预示股价上升。
        'CDLABANDONEDBABY': [],   # 【弃婴】 三日K线模式，第二日价格跳空且收十字星（开盘价与收盘价接近，最高价最低价相差不大），预示趋势反转，发生在顶部下跌，底部上涨。
        'CDLADVANCEBLOCK': [],    # 【大敌当前】 三日K线模式，三日都收阳，每日收盘价都比前一日高，开盘价都在前一日实体以内，实体变短，上影线变长。
        'CDLBELTHOLD': [],        # 【捉腰带线】 两日K线模式，下跌趋势中，第一日阴线，第二日开盘价为最低价，阳线，收盘价接近最高价，预示价格上涨。
        'CDLBREAKAWAY': [],       # 【脱离】  五日K线模式，以看涨脱离为例，下跌趋势中，第一日长阴线，第二日跳空阴线，延续趋势开始震荡，第五日长阳线，收盘价在第一天收盘价与第二天开盘价之间，预示价格上涨
        'CDLCLOSINGMARUBOZU': [], # 【收盘缺影线】 一日K线模式，以阳线为例，最低价低于开盘价，收盘价等于最高价，预示着趋势持续
        'CDLCONCEALBABYSWALL': [],# 【藏婴吞没】 四日K线模式，下跌趋势中，前两日阴线无影线，第二日开盘、收盘价皆低于第二日，第三日倒锤头，第四日开盘价高于前一日最高价，收盘价低于前一日最低价，预示着底部反转。
        'CDLCOUNTERATTACK': [],   # 【反击线】  二日K线模式，与分离线类似。
        'CDLDARKCLOUDCOVER': [],  # 【乌云压顶】  二日K线模式，第一日长阳，第二日开盘价高于前一日最高价，收盘价处于前一日实体中部以下，预示着股价下跌。
        'CDLDOJI': [],            # 【一日K线模式】 开盘价与收盘价基本相同。
        'CDLDOJISTAR': [],        # 【十字星】  一日K线模式，开盘价与收盘价基本相同，上下影线不会很长，预示着当前趋势反转
        'CDLDRAGONFLYDOJI': [],   # 【蜻蜓十字/T形十字】，一日K线模式，开盘后价格一路走低，之后收复，收盘价与开盘价相同，预示趋势反转
        'CDLENGULFING': [],       # 【吞噬模式】  两日K线模式，分多头吞噬和空头吞噬，以多头吞噬为例，第一日为阴线，第二日阳线，第一日的开盘价和收盘价在第二日开盘价收盘价之内，但不能完全相同。
        'CDLEVENINGDOJISTAR': [], # 【十字暮星】  三日K线模式，基本模式为暮星，第二日收盘价和开盘价相同，预示顶部反转
        'CDLEVENINGSTAR': [],     # 【暮星】  三日K线模式，与晨星相反，上升趋势中,第一日阳线，第二日价格振幅较小，第三日阴线，预示顶部反转。
        'CDLGAPSIDESIDEWHITE': [],# 【向上/下跳空并列阳线】， 二日K线模式，上升趋势向上跳空，下跌趋势向下跳空,第一日与第二日有相同开盘价，实体长度差不多，则趋势持续。
        'CDLGRAVESTONEDOJI': [],  # 【墓碑十字/倒T十字】， 一日K线模式，开盘价与收盘价相同，上影线长，无下影线，预示底部反转
        'CDLHAMMER': [],          # 【锤头】 一日K线模式，实体较短，无上影线，下影线大于实体长度两倍，处于下跌趋势底部，预示反转。
        'CDLHANGINGMAN': [],      # 【上吊线】 一日K线模式，形状与锤子类似，处于上升趋势的顶部，预示着趋势反转
        'CDLHARAMI': [],          # 【母子线】  二日K线模式，分多头母子与空头母子，两者相反，以多头母子为例，在下跌趋势中，第一日K线长阴，第二日开盘价收盘价在第一日价格振幅之内，为阳线，预示趋势反转，股价上升。
        'CDLHARAMICROSS': [],     # 【十字孕线】 二日K线模式，与母子县类似，若第二日K线是十字线，便称为十字孕线，预示着趋势反转。
        'CDLHIGHWAVE': [],        # 【风高浪大线】 三日K线模式，具有极长的上/下影线与短的实体，预示着趋势反转。
        'CDLHIKKAKE': [],         # 【陷阱】 三日K线模式，与母子类似，第二日价格在前一日实体范围内,第三日收盘价高于前两日，反转失败，趋势继续。
        'CDLHIKKAKEMOD': [],      # 【修正陷阱】 三日K线模式，与陷阱类似，上升趋势中，第三日跳空高开；下跌趋势中，第三日跳空低开，反转失败，趋势继续。
        'CDLHOMINGPIGEON': [],    # 【家鸽】 二日K线模式，与母子线类似，不同的的是二日K线颜色相同，第二日最高价、最低价都在第一日实体之内，预示着趋势反转。
        'CDLIDENTICAL3CROWS': [], # 【三胞胎乌鸦】 三日K线模式，上涨趋势中，三日都为阴线，长度大致相等，每日开盘价等于前一日收盘价，收盘价接近当日最低价，预示价格下跌。
        'CDLINNECK': [],          # 【颈内线】 二日K线模式，下跌趋势中，第一日长阴线，第二日开盘价较低，收盘价略高于第一日收盘价，阳线，实体较短，预示着下跌继续。
        'CDLINVERTEDHAMMER': [],  # 【倒锤头】  一日K线模式，上影线较长，长度为实体2倍以上，无下影线，在下跌趋势底部，预示着趋势反转。
        'CDLKICKING': [],         # 【反冲形态】 二日K线模式，与分离线类似，两日K线为秃线，颜色相反，存在跳空缺口。
        'CDLKICKINGBYLENGTH': [], # 【由较长缺影线决定的反冲形态】 二日K线模式，与反冲形态类似，较长缺影线决定价格的涨跌。
        'CDLLADDERBOTTOM': [],    # 【梯底】  五日K线模式，下跌趋势中，前三日阴线，开盘价与收盘价皆低于前一日开盘、收盘价，第四日倒锤头，第五日开盘价高于前一日开盘价，阳线，收盘价高于前几日价格振幅，预示着底部反转。
        'CDLLONGLEGGEDDOJI': [],  # 【长脚十字】 一日K线模式，开盘价与收盘价相同居当日价格中部，上下影线长，表达市场不确定性
        'CDLLONGLINE': [],        # 【长蜡烛】 一日K线模式，K线实体长，无上下影线。
        'CDLMARUBOZU': [],        # 【光头光脚/缺影线】 一日K线模式，上下两头都没有影线的实体，阴线预示着熊市持续或者牛市反转，阳线相反。
        'CDLMATCHINGLOW': [],     # 【相同低价】 二日K线模式，下跌趋势中，第一日长阴线，第二日阴线，收盘价与前一日相同，预示底部确认，该价格为支撑位。
        'CDLMATHOLD': [],         # 【铺垫】 五日K线模式，上涨趋势中，第一日阳线，第二日跳空高开影线，第三、四日短实体影线，第五日阳线，收盘价高于前四日，预示趋势持续。
        'CDLMORNINGDOJISTAR': [], # 【十字晨星】 三日K线模式，基本模式为晨星，第二日K线为十字星，预示底部反
        'CDLMORNINGSTAR': [],     # 【晨星】  三日K线模式，下跌趋势，第一日阴线，第二日价格振幅较小，第三天阳线，预示底部反转。
        'CDLONNECK': [],          # 【颈上线】  二日K线模式，下跌趋势中，第一日长阴线，第二日开盘价较低，收盘价与前一日最低价相同，阳线，实体较短，预示着延续下跌趋势。
        'CDLPIERCING': [],        # 【刺透形态】两日K线模式，下跌趋势中，第一日阴线，第二日收盘价低于前一日最低价，收盘价处在第一日实体上部，预示着底部反转。
        'CDLRICKSHAWMAN': [],     # 【黄包车夫】 一日K线模式，与长腿十字线类似，若实体正好处于价格振幅中点，称为黄包车夫
        'CDLRISEFALL3METHODS': [],# 【上升/下降三法】五日K线模式，以上升三法为例，上涨趋势中，第一日长阳线，中间三日价格在第一日范围内小幅震荡，第五日长阳线，收盘价高于第一日收盘价，预示股价上升
        'CDLSEPARATINGLINES': [], # 【分离线】  二日K线模式，上涨趋势中，第一日阴线，第二日阳线，第二日开盘价与第一日相同且为最低价，预示着趋势继续。
        'CDLSHOOTINGSTAR': [],    # 【射击之星】 一日K线模式，上影线至少为实体长度两倍，没有下影线，预示着股价下跌
        'CDLSHORTLINE': [],       # 【短蜡烛】  一日K线模式，实体短，无上下影线
        'CDLSPINNINGTOP': [],     # 【纺锤】一日K线，实体小。
        'CDLSTALLEDPATTERN': [],  # 【停顿形态】 三日K线模式，上涨趋势中，第二日长阳线，第三日开盘于前一日收盘价附近，短阳线，预示着上涨结束
        'CDLSTICKSANDWICH': [],   # 【条形三明治】 三日K线模式，第一日长阴线，第二日阳线，开盘价高于前一日收盘价，第三日开盘价高于前两日最高价，收盘价于第一日收盘价相同
        'CDLTAKURI': [],          # 【探水竿】 一日K线模式，大致与蜻蜓十字相同，下影线长度长。
        'CDLTASUKIGAP': [],       # 【跳空并列阴阳线】 三日K线模式，分上涨和下跌，以上升为例，前两日阳线，第二日跳空，第三日阴线，收盘价于缺口中，上升趋势持续。
        'CDLTHRUSTING': [],       # 【插入】 二日K线模式，与颈上线类似，下跌趋势中，第一日长阴线，第二日开盘价跳空，收盘价略低于前一日实体中部，与颈上线相比实体较长，预示着趋势持续。
        'CDLTRISTAR': [],         # 【三星】 三日K线模式，由三个十字组成，第二日十字必须高于或者低于第一日和第三日，预示着反转。
        'CDLUNIQUE3RIVER': [],    # 【奇特三河床】 三日K线模式，下跌趋势中，第一日长阴线，第二日为锤头，最低价创新低，第三日开盘价低于第二日收盘价，收阳线，收盘价不高于第二日收盘价，预示着反转，第二日下影线越长可能性越大。
        'CDLUPSIDEGAP2CROWS': [], # 【向上跳空的两只乌鸦】，三日K线模式，第一日阳线，第二日跳空以高于第一日最高价开盘，收阴线，第三日开盘价高于第二日，收阴线，与第一日比仍有缺口。
        'CDLXSIDEGAP3METHODS': [],# 【上升/下降跳空三法】 ，五日K线模式，以上升跳空三法为例，上涨趋势中，第一日长阳线，第二日短阳线，第三日跳空阳线，第四日阴线，开盘价与收盘价于前两日实体内，第五日长阳线，收盘价高于第一日收盘价，预示股价上升。

        #Volatility Indicators
        # (波动率指标)当前交易日最高价与最低价差值，前一交易日收盘价与当前交易日最高价间的差值，
        # 前一交易日收盘价与当前交易日最低价的差值，这三者中的最大值为真实波幅。
        # 即真实波动幅度 = max(最大值,昨日收盘价) − min(最小值,昨日收盘价)，
        # 平均真实波动幅度等于真实波动幅度的N日指数移动平均数。波动幅度可以显示出交易者的期望和热情。
        # 波动幅度的急剧增加表示交易者在当天可能准备持续买进或卖出股票，波动幅度的减少则表示交易者对股市没有太大的兴趣。
        # 波动率指标可用于衡量价格的波动情况，辅助判断趋势改变的可能性，市场的交易氛围，也可以利用波动性指标来帮助止损止盈。
        'ATR': [],
        'NATR': [],
        'TRANGE': [],

        #Volume Indicators
        'AD': [],
        'ADOSC': [],
        'OBV': []
    }






